package org.chnxi.study.leetcode.questions50.ques27;

import java.util.Arrays;

/**
 * 参照Ques26，使用双指针的方式
 * 指针一：从0开始，用于记录不匹配元素的位置
 * 指针二：从0开始，用于对集合进行遍历，当元素与预期值不匹配时，将元素放置到第一个指针位置，并将指针位后移，用于存放下一个元素
 *
 * 最后返回的集合中元素个数，即是第一个指针的取值。
 *
 * 执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
 * 内存消耗：38.3 MB, 在所有 Java 提交中击败了5.68%的用户
 */
public class Simple01 {

    public static void main(String[] args) {

        int[] nums1 = {3,2,2,3};
        int res1 = removeElement(nums1 , 2);
        System.out.println("res="+res1+";arrays="+ Arrays.toString(nums1));


        int[] nums2 = {0,1,2,2,3,0,4,2};
        int res2 = removeElement(nums2 , 2);
        System.out.println("res="+res2+";arrays="+ Arrays.toString(nums2));


    }

    public static int removeElement(int[] nums, int val) {
        // 第一个指针
        int idx = 0;

        //第二个指针i，对集合进行遍历寻找与val不匹配的元素，将元素移动到第一个指针位
        for (int i=0; i<nums.length; i++){
            if(nums[i] != val){
                nums[idx] = nums[i];
                idx++;
            }
        }
        return idx;
    }

}
